tidymodelsTécnicas para ‘Big Data’ en Economía - Curso 2023/24
Universidad de Alicante
Dpto. de Fundamentos del Análisis Económico. Universidad de Alicante
tidymodels es una colección de paquetes para el proceso de modelización (NO implementa modelos) con los principios de tidyversemlr3, caret, H2Odplyr transforma los datos para adecuarlos a la modelización, pero tidymodels permite transformaciones específicas para un modelo concreto
initial_split(): particionar los datos en prueba y entrenamiento.
training() y testing() acceden a cada submuestraLas recetas definen las transformaciones a aplicar
recipe() tiene como primer argumento una fórmula (rol de las variables)
Luego se añaden pasos con step_
step_filter(), step_arrange(), step_rm(), etc.
step_naomit()
step_impute_mean(), step_impute_linear(), step_impute_knn()
Se aplican a una variable, todas o un subconjunto con all_outcomes(), all_predictors(), all_numeric(), all_nominal(), contains(), etc.
step_dummy(all_predictors(), -all_numeric())Se pueden añadir términos polinomiales con step_poly(), interacciones de variables con step_interact(), discretizar variables con step_cut(),etc.
Se centran variables con step_center() o se estandarizan con step_scale()
Se crea un objeto de receta (y luego combinarlo con otras partes del proceso)
receta_lm1 <- training(RailTrail_part) %>% # Datos: NO crucial
recipe(volume ~ cloudcover + precip + avgtemp) %>%
step_poly(avgtemp, degree = 6) %>%
step_center(all_predictors(), -all_nominal()) %>%
step_scale(all_numeric(), -all_outcomes())
receta_logit1 <- training(censo_part) %>%
recipe(income ~ age + education + race + sex + capital_gain)prep() y aplicar las transformaciones con juice() o bake()tidymodels define un modelo con una interfaz unificada para distintas bibliotecas (con otros nombres de argumentos)fit()workflow()update_recipe() , update_model(), etc.fit()workflow() (cont.)var())broom se convierten a tibbles para trabajar con ellos (p.e., kable() en un documento)broom::augment() calcula predicciones del modelo, residuos, etc.La función predict() (de parsnip) predice valores numéricos, clases, probabilidad de cada categoría, intervalos de confianza, etc.
Devuelve un tibble que podemos añadir a los datos con bind_cols()
lm1_flujo_est %>%
predict(new_data = RailTrail_prueb) %>%
bind_cols(RailTrail_prueb %>% select(volume)) # Variable predicha .pred
logit1_flujo_est %>%
predict(censo_part %>% testing()) # clase predicha .pred_class
logit1_flujo_est %>%
predict(censo_part %>% testing(), type = "prob") # probabilidades de cada categoríatibble con valores/clases observados (truth) y predichos (estimate), se calcula una métrica (rmse(), rsq(), accuracy(), etc.) o varias (metrics())lm1_flujo_est %>% predict(RailTrail_prueb) %>%
bind_cols(RailTrail_prueb) %>%
metrics(truth=volume, estimate= .pred) # mae(truth=volume, estimate= .pred)
logit1_flujo_est %>% predict(censo_part %>% testing()) %>%
bind_cols(censo_part %>% testing()) %>%
conf_mat(truth=income, estimate= .pred_class) # clase predicha=
# mayor probabilidad predicha
mis_metricas <- metric_set(accuracy, spec, sens) # métricas específicas
logit1_flujo_est %>% predict(censo_part %>% testing()) %>%
bind_cols(censo_part %>% testing()) %>%
mis_metricas(truth=income, estimate= .pred_class) Con más de dos clases, se predice la probabilidad de cada clase y la clase predicha es la más frecuente
La matriz de confusión es similar, pero de dimensiones \(\small k \times k\)
La accuracy sigue teniendo la misma interpretación
La ROC-AUC se calcula para cada clase frente a las demás
vfold_cv() crea las particiones en los datos sin procesaranalysis() y assessment(), respectivamentefit_resamples(), similar a fit(), sobre un flujo de trabajo ya definido y el objeto completo de remuestras de valicación cruzada …Proceso de ajuste (tuning):
en una parte de la muestra de entrenamiento, se estiman los parámetros dado un valor del hiper-parámetro
en la otra parte, se mide el error asociado a ese hiper-parámetro para validar el mejor valor
se elige el valor con mejor métrica de error en validación
\(\Downarrow\)
\(\hspace{0.1cm}\)
grid_random(), grid_max_entropy() o grid_regular()tune_grid() de forma a similar a fit_resamples() en las remuestras por Validación Cruzada de la muestra de entrenamientoNOTA: debemos probar manualmente varios rangos y valores buscando la U
Se puede ver numéricamente el mejor o los cinco mejores candidatos: recordar que, por la variabilidad, varios valores son igualmente aceptables
select_best()last_fit(): ajusta al modelo finalizado en los datos de entrenamiento y lo evalúa en los de prueba.